了解崩潰傾印


一旦 NW.js 崩潰,磁碟上將會產生一個 minidump 檔案 (.dmp)。使用者可以將其包含在錯誤報告中。您可以在崩潰時解碼 minidump 檔案以取得堆疊追蹤。因此,在某些情況下,這有助於找出 NW.js 出了什麼問題。

若要從 minidump 檔案中擷取堆疊追蹤,您需要三樣東西:從崩潰中產生的 minidump (.dmp) 檔案、NW.js 二進位檔的符號檔案,以及 minidump_stackwalk 工具。

尋找 Minidump 檔案

當 NW.js 崩潰時,minidump 檔案將會產生在下列預設目錄中

  • Linux:~/.config/<name-in-manifest>/Crash\ Reports/
  • Windows:%LOCALAPPDATA%\<name-in-manifest>\User Data\CrashPad (在 < 0.21.5 的版本中,由於錯誤 #5248,它位於 %LOCALAPPDATA%\Chromium\User Data\CrashPad
  • Mac:~/Library/Application\ Support/<name-in-manifest>/CrashPad/

<name-in-manifest>清單檔案name 欄位。

從 Linux Minidump 檔案中移除標頭

在 Linux 上產生的 Minidump 檔案具有額外的文字格式標頭。在解碼之前必須將它們移除。Minidump 檔案的實際內容以 MDMP 開頭,後跟無法讀取的二進位檔案。因此,只需刪除 MDMP 之前的文字即可。

整理符號檔案

已發佈的 NW.js 的符號檔案套件可以從 https://dl.nwjs.io/ 下載。

例如,在 Mac 上,使用 0.57.1

https://dl.nwjs.io/v0.57.1/nwjs-symbol-v0.57.1-osx-x64.zip

https://dl.nwjs.io/v0.57.1/nwjs-sdk-symbol-v0.57.1-osx-x64.zip

然後,您必須將符號檔案整理成 正確路徑和正確檔案名稱,以便 minidump_stackwalk 工具使用。minidump_stackwalk 使用 簡單的符號供應器 來尋找符號檔案。以下是它尋找符號檔案的方式。

該工具將嘗試按以下模式搜尋 .sym(對於 Mac,將 .breakpad 變更為 .sym)檔案
{SYMBOLS_ROOT}/{DEBUG_FILE_NAME}/{DEBUG_IDENTIFIER}/{DEBUG_FILE_NAME_WITHOUT_PDB}.sym

  • {SYMBOLS_ROOT} 是所有符號檔案的根資料夾。您可以將所有版本的 NW .sym 檔案和平台放在同一個資料夾中。
  • {DEBUG_FILE_NAME}{DEBUG_IDENTIFIER}{DEBUG_FILE_NAME_WITHOUT_PDB} 可以從 .sym 檔案的第一行取得,該行通常看起來像 MODULE Linux x86_64 265BDB6BE043D5C70D3A1E279A8F0B1A0 nw(對於 Mac,例如 MODULE mac x86_64 4E7C70708AFD3C889F02B149AB5007080 nwjs)。
    • 265BDB6BE043D5C70D3A1E279A8F0B1A0{DEBUG_IDENTIFIER}
    • nw{DEBUG_FILE_NAME}
    • {DEBUG_FILE_NAME_WITHOUT_PDB} 可以透過移除僅在 Windows 中必要的 .pdb 副檔名,從 {DEBUG_FILE_NAME} 轉換而來。

例如,在 Mac 上,使用 0.57.1

-symbols_root/
 -nwjs/
    -4E7C70708AFD3C889F02B149AB5007080/
        -nwjs.sym
 -nwjs Framework/
    -87A9EA49BC473F4C8B7817631E820BEB0/
        -nwjs Framework.sym
 -nwjs Helper/
    -5598EA295F4F36FDA21CB9A5B11B11AA0/
        -nwjs Helper.sym

使用 minidump_stackwalk 解碼迷你傾印檔

minidump_stackwalk 可以使用 NW.js 建置,或直接在 Mac 和 Linux 上從 breakpad 原始碼建置。或者,您可以在 Windows 上從 Cygwin 安裝預先建置的版本。

若要從 minidump 檔案取得堆疊追蹤,請執行下列指令

minidump_stackwalk minidump_file.dmp /path/to/symbols_root 2>&1

如果符號檔案未正確組織,您仍然可以使用此工具取得呼叫堆疊。但是,您將看不到符號,且輸出最後一節「載入的模組」中會出現警告,如下所示

0x00240000 - 0x02b29fff nw.exe ??? (main) (WARNING: No symbols, nw.exe.pdb, 669008F7B6EE44058CBD5F21BEB5B5CFe)

觸發崩潰以進行測試

若要測試崩潰傾印功能,您可以使用 NW.js 提供的 API App.crashBrowser()App.crashRenderer() 故意觸發崩潰。它們分別會使瀏覽器程序和渲染程序崩潰。

參考